package com.usian.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.usian.mapper.TbContentCategoryMapper;
import com.usian.pojo.TbContentCategory;
import com.usian.service.ContentCategoryService;
import com.usian.utils.CatNode;
import com.usian.utils.CatResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author chen
 * @date 2021/1/11 - 17:02 - 星期一
 * @project usian_parent
 * @package com.usian.service.Impl
 * @by GGbomd猪猪侠
 */
@Service
public class ContentCategoryServiceImpl implements ContentCategoryService {

    @Autowired
    private TbContentCategoryMapper tbContentCategoryMapper;

    /**
     * 根据父节点查询子节点
     * @param id
     * @return
     */
    @Override
    public List<TbContentCategory> selectContentCategoryByParentId(Long id) {
        QueryWrapper<TbContentCategory> QueryWrapper = new QueryWrapper<>();
        QueryWrapper.eq("parent_id",id);
        QueryWrapper.eq("status",1);
        List<TbContentCategory> tbContentCategories = tbContentCategoryMapper.selectList(QueryWrapper);
        return tbContentCategories;
    }

    /**
     * 内容分类添加操作 tb_content_category
     * @param tbContentCategory
     * @return
     */
    @Override
    public Integer insertContentCategory(TbContentCategory tbContentCategory) {
        //1、添加内容分类
        tbContentCategory.setUpdated(new Date());
        tbContentCategory.setCreated(new Date());
        // 该类目是否为父类目，1为true，0为false
        tbContentCategory.setIsParent(false);
        tbContentCategory.setSortOrder(1);
        tbContentCategory.setStatus(1);
        Integer contentCategoryNum = tbContentCategoryMapper.insert(tbContentCategory);
        //2.1、查询当前新节点的父节点
        QueryWrapper<TbContentCategory> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("id",tbContentCategory.getParentId());
        TbContentCategory category = tbContentCategoryMapper.selectOne(queryWrapper);
        //2.2、判断当前父节点是否是子节点 不是子节点将IsParent 改成true 1
        if (!category.getIsParent()){
            category.setIsParent(true);
            category.setUpdated(new Date());
            tbContentCategoryMapper.updateByPrimaryKey(category);
        }
        return contentCategoryNum;
    }

    /**
     * 删除内容分类
     * @param categoryId
     * @return
     */
    @Override
    public Integer deleteContentCategoryById(Long categoryId) {
        //查询当前节点
        QueryWrapper<TbContentCategory> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("id",categoryId);
        TbContentCategory category = tbContentCategoryMapper.selectOne(queryWrapper);
        //父节点 不允许删除
        if(category.getIsParent()==true){
            return 0;
        }
        //不是父节点 删除 逻辑删除 状态是1正常 2删除
        category.setStatus(2);
        category.setId(categoryId);
        int i = tbContentCategoryMapper.updateByPrimaryKey(category);
        //查询当前节点的其他节点
        Long parentId = category.getParentId();
        queryWrapper.eq("parent_id",parentId);
        List<TbContentCategory> tbContentCategories = tbContentCategoryMapper.selectList(queryWrapper);
        Integer status = null;
        for (TbContentCategory tbContentCategory : tbContentCategories) {
            status = tbContentCategory.getStatus();
        }
        //删除之后如果父节点没有子节点，则修改isParent为false  0
        if(status==2 &&  tbContentCategories.size()>0) {
            TbContentCategory ContentCategory = new TbContentCategory();
            ContentCategory.setId(category.getParentId());
            ContentCategory.setIsParent(false);
            ContentCategory.setUpdated(new Date());
            tbContentCategoryMapper.updateByPrimaryKeySelective(ContentCategory);
        }
        return i;
    }

    /**
     * 修改内容分类
     * @param id
     * @param name
     * @return
     */
    @Override
    public Integer updateContentCategory(Long id, String name) {
        TbContentCategory tbContentCategory = new TbContentCategory();
        tbContentCategory.setName(name);
        tbContentCategory.setId(id);
        return tbContentCategoryMapper.updateByPrimaryKeySelective(tbContentCategory);
    }

    /**
     *查询商品首页分类
     * @return
     */
    @Override
    public CatResult selectItemCategoryAll() {
        CatResult catResult = new CatResult();
        //查询商品分类
        catResult.setData(getCatList(0L));
        return catResult;
    }

    /**
     * 私有方法  查询商品分类
     * @param parentId
     * @return
     */
    private List<?> getCatList(Long parentId) {
        // 通过parentId 查询当前通过parentId所对应的上一级父节点
        QueryWrapper<TbContentCategory> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("parent_id",parentId);
        List<TbContentCategory> tbContentCategories = tbContentCategoryMapper.selectList(queryWrapper);
        List list = new ArrayList();
        // 统计记录数
        int count = 0;
        for (TbContentCategory tbContentCategory : tbContentCategories) {
            //判断当前的节点是否是父节点
            if (tbContentCategory.getIsParent()){ //IsParent 默认是父节点 1 是true
                CatNode catNode = new CatNode();
            }
        }
        return null;
    }
}
